package com.tlias.tliaswebmanagement.service.impl;

import com.tlias.po.Dept;
import com.tlias.tliaswebmanagement.mapper.DeptMapper;
import com.tlias.tliaswebmanagement.service.DeptService;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * 部门业务逻辑层实现类，需要加@Service注解
 */
@Service
public class DeptServiceImpl implements DeptService {

    @Autowired
    private DeptMapper deptMapper;

    /**
     * 1.查询部门列表
     */
    @Override
    public List<Dept> list() {
        //1.1 由于获取部门列表数据的逻辑及其简单，这里就只需要调用数据访问层对象，让其拿到结果即可
        List<Dept> deptList =deptMapper.selectAll();
        //1.2 获取到的部门集合返回给Controller控制层
        return deptList;
    }

    /**
     * 2. 根据ID删除部门
     */
    @Override
    public void deleteById(Integer id) {
        //2.1 利用deptMapper数据访问层对象，根据传入的id删除数据表中的对应部门数据
        deptMapper.deleteById(id);
    }

    @Override
    public void addOne(DeptDTO dto) {

        Dept dept = new Dept();
        BeanUtils.copyProperties(dto, dept);
        deptMapper.addOne(dept);

    }

    /**
     * 5. 修改部门
     */
    @Override
    public void update(DeptDTO dto) {
        //5.1 我们的tb_dept数据表的create_time和update_time字段都是有特殊处理的，所以此时修改操作不需要在Java代码中更新修改时间

        //5.2 调用Mapper数据访问层对象，传入DeptDTO对象，执行修改逻辑
        deptMapper.update(dto);
    }

    @Override
    public void update(DeptDTO dto) {

    }

    /**
     * 4. 根据ID查询部门
     */

    public DeptVO getById(Integer id) {
        //4.1 调用Mapper数据访问层对象，传入部门ID，获取部门数据
        Dept dept = deptMapper.getById(id);

        //4.2 Mapper数据访问层操作数据库后，得到的结果是PO包下的Dept对象，而Controller需要的是VO包下的DeptVO对象

        //4.3 所以要将Dept对象转换成DeptVO对象，先创建一个DeptVO对象，此时它的各个属性都是null
        DeptVO deptVO = new DeptVO();

        //4.4 利用Spring框架自带的BeanUtils工具类，将Dept对象中的数据复制给DeptVO对象
        BeanUtils.copyProperties(dept, deptVO);

        //4.5 得到拥有数据值的VO对象后，返回给Controller即可
        return deptVO;
    }
}